home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
oper_sys
/
oasis
/
oasisegs.lha
/
egs
/
queena.lisp
< prev
next >
Wrap
Lisp/Scheme
|
1992-04-23
|
1KB
|
43 lines
(proclaim '(type fixnum *count*))
(proclaim '(type (array fixnum 2) *all*))
(proclaim '(type (array fixnum 1) *board*)
(proclaim '(function run (fixnum) nil))
(proclaim '(function queen (fixnum fixnum) nil))
(proclaim '(function safe (fixnum fixnum) boolean))
(defvar *count* 0)
(defvar *all* (make-array '(800 10)
:element-type 'fixnum
:initial-element 0))
(defvar *board* (make-array '(10)
:element-type 'fixnum)
(defun run (size)
(declare (type fixnum size))
(queen 0 size) )
(defun queen (n size)
(declare (type fixnum n)
(type fixnum size) )
(cond ((= n size)
(do ((i 0 (+ i 1)))
((= i n) (incf *count*))
(declare (type fixnum i))
(setf (aref *all* *count* i) (aref *board* i)) ))
(t (do ((m 0 (+ m 1)))
((= m size))
(declare (type fixnum m))
(when (safe m 1)
(setf (aref *board* n) m)
(queen (+ n 1) size) )))))
(defun safe (m n)
(declare (type fixnum m)
(type fixnum n) )
(do ((i 1 (+ i 1)))
((> i n) t)
(let ((x (aref *board* (- n i))))
(declare (type fixnum x))
(if (or (= m x) (= m (+ x i)) (= m (- x i))) return nil) )))